Изучение поведения пользователей мобильного приложения заказа еды

Описание проекта

Вы работаете в стартапе, который продаёт продукты питания. Нужно разобраться, как ведут себя пользователи вашего мобильного приложения.

Изучите воронку продаж. Узнайте, как пользователи доходят до покупки. Сколько пользователей доходит до покупки, а сколько — «застревает» на предыдущих шагах? На каких именно?

После этого исследуйте результаты A/A/B-эксперимента. Дизайнеры захотели поменять шрифты во всём приложении, а менеджеры испугались, что пользователям будет непривычно. Договорились принять решение по результатам A/A/B-теста. Пользователей разбили на 3 группы: 2 контрольные со старыми шрифтами и одну экспериментальную — с новыми. Выясните, какой шрифт лучше.

Описание данных

Данные представлены в файле _/datasets/logsexp.csv

Каждая запись в логе — это действие пользователя, или событие.

Оглавление

Шаг 1. Загрузка данных и изучение общей информации

Данные прочитаны, в столбцах ожидаемая информация, timestamp времени стоит сконвертировать в дату-время.

Шаг 2. Подготовка данных

Заменим названия столбцов на общепринятые для датафреймов.

Теперь с названиями столбцов будет легче работать.

Проверим наличие пропусков, дубликатов и типы данных.

Пропусков данных нет.

В исходных данных есть 413 полностью одинаковых строчек. Проверим данные.

Как видно, с технической стороны для одного и того же устройства и одного типа событий генерится 2 события в одну и ту же секунду Unix time. Возможно, программа отрабатывает неверно, но так как дубликатов всего

всего 0.2%, то пока что оставим дубликаты как есть. Возможно стоит сообщить коллегам, что в некоторых случаях событие дублируется.

Добавим столбца даты и времени, а также отдельный столбец дат.

Мы получили готовый к обработке массив данных.

Шаг 3. Изучение и проверка данных

Изучим количественные показатели в исходных данных.

Всего 244 тыс. событий в исходных данных.

Для 7551 пользователя.

На каждого пользователя приходится почти по 32 события.

Рассмотрим данные по времени.

В исходных данных события за период с 25 июля по 7 августа 2019 года.

Как видно на распределении, большая часть событий касаются периода с 1 августа до 7 августа 2019 года. Проверим сколько событий лежат вне этого диапазона.

С учетом того, что только 1% всех событий в исходных данных касаются периода до августа 2019 года, то мы можем исключить эти события и упростить анализ, не потеряв 99% данных.

В оставшемся массиве данных 241298 событий, чего вполне достаточно для дальнейшего анализа. События распеределены в течение 7 дней с четверга 2019-08-01 по среду 2019-08-07.

При удалении части событий мы не потеряли большую часть пользователей (99.8%), распределение между экспериментальными группами не изменилось.

Шаг 4. Изучение воронки событий

Изучим какие события есть в логах.

Чаще всего встречаются события по открытию основаного экрана (MainScreenAppear), далее идут события с предложениями (OffersScreenAppear), затем экрана корзины (CartScreenAppear), платежа (PaymentScreenSuccessful) и реже всего - прохождение обучения (Tutorial).

Посмотрим на количество уникальных пользователей, который совершали каждое и этих событий.

Оказалось, что только 98% пользователей открывали главный экран приложения. То есть есть пользователи, для которых не был зафиксирован первичный вход. Возможно, он состоялся в дату ранее 1 августа 2019 года, поэтому он не попал в выборку.

По этой таблице видно, что сначала пользователи попадают на главный экран, затем опционально просматривают экран с предложениями, затем переходят на экран с корзиной и в конце концов покупают товар. Из общего ряда выпадает экран с обучением (Tutorial), который не требуется для совершения покупки и поэтому может быть исключен из расчета воронки событий.

Как видно по воронке событий больше всего пользователей теряются на шаге "Просмотр предложения (OffersScreenAppear)" (38%). После этого шага 81% всех пользователей переходят в корзину и 95% из них совершают покупку. Из всех пользователей 48% совершают покупку.

Шаг 5. Изучение результатов эксперимента

Рассчитаем количество пользователей в каждой экспериментальной группе.

Как видно, во всех группах примерно одинаковое количество пользователей, можно продолжать анализ.

Проверим на контрольной группе правильность расчетов. В исходных данных эти группы носят отметки 246 и 247.

Получили сводную таблицу для экспериментов 246 и 247, которая позволит нам проверить, есть ли статистически значимые различия между выборками для А/А теста.

В первом приближении можно заключить, что группа 247 показала на 2 процентных пункта худший результат по сравнению с группой 246 (конверсия в покупку 47% вместо 49%). Проверим, есть ли статистически значимая разница.

Так как согласно центральной предельной теореме выборки выборочные средние нормально распределены вокруг среднего всей совокупности независимо от того, как распределена сама генеральная совокупность. Разница между пропорциями, наблюдаемыми на выборках, будет нашей статистикой (переменная, значения которой рассчитываются только по выборочным данным). Тогда если настоящие пропорции обеих совокупностей не отличаются, то можно расчитать значение z, которое будет распределено нормально и легко можно будет рассчитать насколько полученные пропорции статистически различны. Так как нам надо подтвердить, что они равны, либо не равны, нужно использовать двусторонний тест.

Формула для расчета значения Z: $$Z \approx \frac{P_1 - P_2) - (\pi_1 - \pi_2)}{\sqrt{P(1 - P)(1/n_1 + 1/n_2)}}$$

здесь $n_1$ и $n_2$ — размеры двух сравниваемых выборок, то есть количества наблюдений в них; $P_1$, $P_2$ — пропорции, наблюдаемые в выборках; $P$ — пропорция в выборке, скомбинированной из двух наблюдаемых; $\pi_1$ и $\pi_2$ — настоящие пропорции в сравниваемых генеральных совокупностях. Мы будем проверять гипотезу о равенстве $\pi_1$ и $\pi_2$, поэтому при верной нулевой гипотезе критерий $Z$ можно рассчитывать только по выборочным данным. Это значение будет распределено нормально со средним в $0$ и стандартным отклонением $1$, поэтому p-значение можно расчитать по формуле нормального распределения.

Выберем для АА-теста критический уровень значимости равный 0.05. Проверим гипотезы о каждом из событий. Нулевые гипотезы будут о том, что нет статистической разницы между долями пользователей, совершивших действие в выборках 246 и 247, а альтернативная - о том что разница есть. Соответственно, нулевые гипотезы могут быть отвергнуты при p-value ниже выбранного уровня.

Создадим вспомогательную функцию для проведения Z теста и расчета серий для добавления в датафрейм.

Так как расчет мы проводить исходя из количества всех уникальных пользователей в каждой из групп, создадим вспомогательный массив.

Добавим новую колонку для значений p-value.

Добавим столбец с результатами z-теста.

Таким образом по всем событиям нулевую гипотезу нельзя отбросить. Статистически значимых различий между контрольными группами нет.

Теперь можно провести A/B тест сравнение с экспериментальной группой 248.

Сравним результаты с каждой из контрольных групп и с объединенной контрольной. Так как мы будем сравнивать одну и ту же выборку 3 раза, то применим поправку Бонферрони к выбору критического уровня значимости.

Статистически значимых различий между контрольной группой 246 и экспериментальной 248 нет.

Статистически значимых различий между контрольной группой 247 и экспериментальной 248 нет.

Статистически значимых различий между объединенной контрольной группой 246+247 и экспериментальной 248 нет.

Расчитаем отдельно конверсии в каждом случае (отношение количество покупателей к общему количеству зашедших на главный экран приложения).

Таким образом, несмотря на то, что есть разница в конверсии в покупателей пользователей контрольных групп 246, 247 и экспериментальной 248, статистически значимой разницы в результатах нет, причем для всех событий и всех гипотез.

Так как для уменьшения влияния накопления ошибки при множественном сравнении мы использовали поправку Бонферрони, можно отдельно рассмотреть ситуацию, как изменится результат при выборе критического уровня значимости 0.1.

Результаты для А/A теста не изменились, проверим для A/B теста.

Без поправок Бонферрони наблюдается отказ от нулевой гипотезы для случая сравнения групп 246 и 248 по событию CartScreenAppear.

При внесении поправки Бонферрони:

Таким образом, поправка Бонферрони позволяет избежать накопления ошибки при множественном сравнении и получить одинаковый результат в большем диапазоне критических уровней значимости (в данном случае для 0.05 и 0.10).

Общий вывод и рекомендации

В работе был проведен анализ различных показателей пользователей мобильного приложения заказчика и проведены следующие шаги:

Как показал анализ:

С учетом результатов проведенного анализа можно заключить, что изменения, проверянные в экспериментальной группе 248 не отразились на конверсии пользователей приложения в покупателей продуктов.

Предалагается проверка следующей гипотезы и проведение А/В теста для нее с целью нахождения оптимального варианта увеличения конверсии.